import os
from langchain_deepseek import ChatDeepSeek
from langchain_core.messages import SystemMessage, HumanMessage, AIMessage
from langchain_core.prompts import ChatPromptTemplate

deepseek_token = os.getenv("DEEPSEEK_TOKEN", "")

dsllm = ChatDeepSeek(
    model="deepseek-chat",
    temperature=0.5,
    max_tokens=4096,
    timeout=None,
    max_retries=2,
    streaming=False,
    api_key=deepseek_token,
)

syste_prompt = """
## Role:
你是一个文档总结专家，帮助用户完成从已知内容中总结问题与答案。

## Constraints:
- 使用简练的语言针对已知内容总结出一或二个问题与准确答案。
- 从问题的描述，总是的原因，解决问题的方案与步骤，这三个方面进行概括总结。
- 如已知内容中包含分析与解决步骤，请列出相关的分析步骤与解决过程。

## Output Format:

### Question: 问题的描述内容
### Root Cause: 总是的原因描述
### Answer: 解决问题的方案与步骤

"""

user_prompt = ChatPromptTemplate.from_template("已知内容:\n\n{context}\n\n")

def read_txt_files_gen_qa(directory_path):
    """
    读取指定目录下所有.txt文件的内容
    
    Args:
        directory_path (str): 目录路径
    """
    # 检查目录是否存在
    if not os.path.exists(directory_path):
        print(f"错误：目录 '{directory_path}' 不存在")
        return
    
    count = 0
    # 遍历目录中的所有文件
    for filename in os.listdir(directory_path):
        # 检查是否为.txt文件
        if filename.endswith('.txt'):
            file_path = os.path.join(directory_path, filename)
            # 确保是文件而不是目录
            if os.path.isfile(file_path):
                try:
                    number_part = os.path.splitext(filename)[0]
                    # 读取文件内容
                    with open(file_path, 'r', encoding='utf-8') as file:
                        content = file.read()
                        print(f"=== issue: {number_part}, 文件: {filename} : {len(content)} ===")
                        # print(content)
                        system_message = SystemMessage(content=syste_prompt)
                        user_message = HumanMessage(content=user_prompt.format(context=content))
                        messages = [system_message, user_message]
                        response = dsllm.invoke(messages, config={"streaming": False})
                        qa = response.content
                        print(qa)
                        # 将QA结果写入文件
                        with open(f"md/{number_part}.md", 'w', encoding='utf-8') as qa_file:
                            # qa_file.write(f"=== 文件: {filename} ===\n")
                            # qa_file.write(f"{len(content)}\n")
                            # qa_file.write("QA结果:\n")
                            qa_file.write(qa)
                            qa_file.write(f"\n### 参考: https://github.com/OpenCSGs/csghub/issues/{number_part}\n")
                            # qa_file.write("\n" + "="*50 + "\n")

                        print("=" * 50)
                    count = count + 1
                except Exception as e:
                    print(f"读取文件 {filename} 时出错: {e}")
    print(f"共读取了{count}个txt文件")

# 使用示例
if __name__ == "__main__":
    # directory = input("请输入目录路径: ").strip()
    # directory = "/Users/hhwang/temp/github_issues/"
    directory = "/Users/hhwang/code/gitee/haihwang/langgraph-examples/issue_agent/issues/"
    read_txt_files_gen_qa(directory)
